package com.gitee.demo

object _HigherOrderFunction {
  /*
  * 高阶函数包括:
  *   1.作为值得函数
  *   2.匿名函数
  *   3.闭包
  *   4.柯里化 */
  def main(args: Array[String]): Unit = {
    //将一个整数列表中的每个元素转换为对应个数的小星星
    //1.作为值得函数
    val func1 = (num: Int) => "*" * num
    println("作为值得函数: " + (1 to 10).map(func1))
    //2.匿名函数
    println("匿名函数: " + (1 to 10).map("*" * _))
    //3.闭包
    //其实就是一个函数,只不过返回值依赖于函数外的变量
    var y: Int = 277
    val add = (x: Int) => {
      x + y
    }
    println("闭包: "+add(389)) //结果 666
    //4.柯里化
    //将原先接收多个参数的方式转换成多个参数列表
    def calc_carried(x: Double, y: Double)(func_calc: (Double, Double) => Double) = {
      func_calc(x,y)
    }
    println("柯里化之加: "+calc_carried(10, 10)(_ + _))
    println("柯里化之减: "+calc_carried(10, 10)(_ - _))
    println("柯里化之乘: "+calc_carried(10, 10)(_ * _))
    println("柯里化之除: "+calc_carried(10, 10)(_ / _))
  }
}
